moectf2020 write up for rop2
前言
和上一道题其实是差不多的,但是想了半天才想明白是怎么一回事QAQ
0x00.安全检查
首先使用checksec指令,发现其存在栈不可执行保护

0x01.逆向分析
拖进IDA,我们可以看到这一题和ROP1基本上没有太大的不同,都是直接存在gets函数的溢出漏洞

以及system函数的gadget和pop rdi的gadget


(plt表里也有system)

不同的是,这一次并没有给我们预留下可以利用的"/bin/sh"字符串Or2

0x02.漏洞利用
那么我们是否可以手动读入/bin/sh字符串呢?答案是肯定的
首先存在gets()函数可以读入字符串

其次我们在IDA中按下CTRL + S,可以看到存在一个可以供我们读写的.bss段

那么我们只需要将/bin/sh字符串读到这个段上,再将之作为system函数的参数即可getshell
那么我们可以构造payload如下:
1 | from pwn import * |
连接服务器,发送我们的payload,即可getshell

得到flag:
1 | moectf{d44bc3cb-471b-4906-822b-ea5cb32c4acb} |
moectf2020 write up for rop2
http://meteorpursuer.github.io/2020/12/09/moectf2020 write up for rop2/

